#include "flash.h"
#include <stdio.h>



// void flash_erase(uint32_t address)
// {
//     fmc_unlock();
//     // __disable_irq();
//     fmc_page_erase(address);
//     // __enable_irq();
//     fmc_lock();
// }

// void flash_write(uint32_t address,uint32_t *data,uint32_t len)
// {
//     fmc_unlock();
//     // __disable_irq();
//     for(uint32_t i=0;i<len;i++)
//     {
//         fmc_word_program(address,data[i]);
//         address += 4;
//     }
//     // __enable_irq();
//     fmc_lock();
// }


// void flash_read(uint32_t address,uint32_t *data,uint32_t len)
// {
//     for(uint32_t i=0;i<len;i++)
//     {
//         data[i] = *(uint32_t*)address;
//         address += 4;
//     }
// }


/**
  * @brief  向指定Flash地址写入一个32位字数据
  * @param  address: 目标地址（必须4字节对齐）
  * @param  data: 待写入的32位数据
  * @retval 操作状态:
  *           - 0: 写入成功
  *           - -1: 地址未对齐
  *           - -2: Flash控制器写入失败
  *           - -3: 编程操作失败
  */
 int32_t flash_write_word(uint32_t address, uint32_t data)
 {
    /* 检查地址对齐 */
    if(address & 0x03)
        return -1;  // 地址必须4字节对齐

    /* 字写入Flash */
    if(FMC_READY != fmc_word_program(address,data))
    {
        return -2;
    }

    /* 验证数据 */
    if(REG32(address) != data)
    {
        return -3;
    }
    else
    {
        // printf("flash address:0x%08X write success, data readback is:0x%08X, write data is:0x%08X\r\n",address,REG32(address),data);
        // fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR|FMC_FLAG_PGAERR|FMC_FLAG_PGERR);
    }
     
     return 0;                    // 写入成功
 }




